<HTML>
<HEAD>
<TITLE>
EtgRecUnAlmacenamiento.cpp
</TITLE>
</HEAD>
<BODY>
<PRE>
<font color="blue">#include</font> <font color="maroon">"EtgRecUnAlmacenamiento.h"</font>


EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>EtgRecUnAlmacenamiento<font color="black">(</font>TipoMemoria tipoMemoria,TipoIndice tipoIndice,EstrategiaIndice <font color="black">*</font>indice,TipoAlmacenamiento tipoAlmacenamiento,TipoEstrategia tipoEstrategia,Almacenamiento <font color="black">*</font><font color="black">*</font>persistencia,<font color="blue">void</font><font color="black">*</font> ptr,PrimaryKey <font color="black">*</font>PK<font color="black">)</font><font color="black">{</font>
     <font color="green">//this-&#62;indice = indice;</font>
     <font color="blue">if</font> <font color="black">(</font>tipoIndice<font color="black">=</font><font color="black">=</font>HASH<font color="black">)</font>
        <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">=</font><font color="black">(</font>EstrategiaIndice<font color="black">*</font><font color="black">)</font> <font color="blue">new</font> IndiceHashExtensible<font color="black">(</font>PK<font color="black">)</font>;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice <font color="black">=</font> tipoIndice;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>PK <font color="black">=</font> PK;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>persistencia <font color="black">=</font> persistencia;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoAlmacenamiento <font color="black">=</font> tipoAlmacenamiento;
     vector<font color="black">&#60;</font>Dato<font color="black">*</font><font color="black">&#62;</font> vec;    
     vec.clear<font color="black">(</font><font color="black">)</font>;
     <font color="blue">switch</font><font color="black">(</font>tipoEstrategia<font color="black">)</font><font color="black">{</font>          
          <font color="blue">case</font> REGISTROS<font color="black">:</font>
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm <font color="black">=</font> <font color="blue">new</font> EstrategiaRegistros<font color="black">(</font>persistencia,tipoAlmacenamiento<font color="black">)</font>;
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion <font color="black">=</font> BINARIO;
               <font color="blue">break</font>;
          <font color="blue">case</font> BLOQUES<font color="black">:</font>
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm <font color="black">=</font> <font color="blue">new</font> EstrategiaBloques<font color="black">(</font>persistencia,tipoAlmacenamiento<font color="black">)</font>;
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion <font color="black">=</font> BINARIO;
               <font color="blue">break</font>;
          <font color="blue">case</font> TEXT<font color="black">:</font>
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm <font color="black">=</font> <font color="blue">new</font> EstrategiaTexto<font color="black">(</font>persistencia,tipoAlmacenamiento<font color="black">)</font>;
               <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion <font color="black">=</font> TEXTO;               
     <font color="black">}</font>
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>crear<font color="black">(</font>tipoMemoria,vec,ptr<font color="black">)</font>;                                                           
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>insertar<font color="black">(</font>Dato <font color="black">*</font>datoNvo<font color="black">)</font><font color="black">{</font>
     <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>ARBOL<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>insertarArbol<font color="black">(</font>datoNvo<font color="black">)</font>;
     <font color="blue">else</font> <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>HASH<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>insertarHashing<font color="black">(</font>datoNvo<font color="black">)</font>;     
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>insertarArbol<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>
     <font color="blue">int</font> nro;
     try<font color="black">{</font>
          <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>insertar<font color="black">(</font>dato,<font color="black">&</font>nro<font color="black">)</font>;
     <font color="black">}</font>
     <font color="blue">catch</font><font color="black">(</font>exception <font color="black">*</font>e<font color="black">)</font><font color="black">{</font>
          <font color="blue">throw</font> e;                
     <font color="black">}</font>
     <font color="blue">void</font><font color="black">*</font> datoSerializado<font color="black">=</font>NULL;
     dato<font color="black">-</font><font color="black">&#62;</font>serialize<font color="black">(</font><font color="black">&</font>datoSerializado,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion<font color="black">)</font>;
     try<font color="black">{</font>
          <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">-</font><font color="black">&#62;</font>Cargar<font color="black">(</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializado,<font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> nro<font color="black">)</font>;
     <font color="black">}</font>
     <font color="blue">catch</font><font color="black">(</font>exception <font color="black">*</font>e<font color="black">)</font><font color="black">{</font>
          <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>eliminar<font color="black">(</font>dato,nro<font color="black">)</font>;               
          <font color="blue">throw</font> e;
     <font color="black">}</font>     
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>insertarHashing<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>
     <font color="blue">void</font><font color="black">*</font> datoSerializado<font color="black">=</font>NULL;
     dato<font color="black">-</font><font color="black">&#62;</font>serialize<font color="black">(</font><font color="black">&</font>datoSerializado,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion<font color="black">)</font>;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">-</font><font color="black">&#62;</font>Cargar<font color="black">(</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializado,<font color="black">(</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">)</font> <font color="maroon">0</font><font color="black">)</font>;
     vector<font color="black">&#60;</font>HashChange<font color="black">&#62;</font><font color="black">*</font> vecAux <font color="black">=</font> <font color="black">(</font><font color="black">(</font>IndiceHashExtensible<font color="black">*</font><font color="black">)</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>getModificaciones<font color="black">(</font><font color="black">)</font>;   
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ejecutarCambios<font color="black">(</font>vecAux<font color="black">)</font>;
     vecAux<font color="black">-</font><font color="black">&#62;</font>clear<font color="black">(</font><font color="black">)</font>;
     free<font color="black">(</font>datoSerializado<font color="black">)</font>;
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>ejecutarCambios<font color="black">(</font>vector<font color="black">&#60;</font>HashChange<font color="black">&#62;</font> <font color="black">*</font>vecAux<font color="black">)</font><font color="black">{</font>
     Dato <font color="black">*</font>datoAux;
     vector<font color="black">&#60;</font>HashChange<font color="black">&#62;</font><font color="black">:</font><font color="black">:</font> iterator it;
     <font color="blue">for</font> <font color="black">(</font>it<font color="black">=</font>vecAux<font color="black">-</font><font color="black">&#62;</font>begin<font color="black">(</font><font color="black">)</font>; it <font color="black">!</font><font color="black">=</font> vecAux<font color="black">-</font><font color="black">&#62;</font>end<font color="black">(</font><font color="black">)</font>; it<font color="black">+</font><font color="black">+</font><font color="black">)</font><font color="black">{</font>
         <font color="black">(</font><font color="black">(</font>EstrategiaBloques<font color="black">*</font><font color="black">)</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>buscar<font color="black">(</font><font color="black">&</font>datoAux,it<font color="black">-</font><font color="black">&#62;</font>getBloqueAnterior<font color="black">(</font><font color="black">)</font>,it<font color="black">-</font><font color="black">&#62;</font>getClave<font color="black">(</font><font color="black">)</font>,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>PK<font color="black">)</font>;
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>eliminar<font color="black">(</font>datoAux,it<font color="black">-</font><font color="black">&#62;</font>getBloqueAnterior<font color="black">(</font><font color="black">)</font><font color="black">)</font>;
         <font color="blue">int</font> bloqueActual <font color="black">=</font> it<font color="black">-</font><font color="black">&#62;</font>getBloqueActual<font color="black">(</font><font color="black">)</font>;
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>insertar<font color="black">(</font>datoAux,<font color="black">&</font>bloqueActual<font color="black">)</font>;
     <font color="black">}</font>       
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>modificar<font color="black">(</font>Dato <font color="black">*</font>datoNvo<font color="black">)</font><font color="black">{</font>
     <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>ARBOL<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>modificarArbol<font color="black">(</font>datoNvo<font color="black">)</font>;
     <font color="blue">else</font> <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>HASH<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>modificarHashing<font color="black">(</font>datoNvo<font color="black">)</font>;         
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>modificarArbol<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>     
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>modificarHashing<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>
     <font color="blue">void</font><font color="black">*</font> datoSerializadoNuevo<font color="black">=</font>NULL;
     dato<font color="black">-</font><font color="black">&#62;</font>serialize<font color="black">(</font><font color="black">&</font>datoSerializadoNuevo,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion<font color="black">)</font>;
     <font color="blue">void</font><font color="black">*</font> datoSerializadoViejo<font color="black">=</font>NULL;
     <font color="blue">int</font> aux;
     <font color="blue">char</font><font color="black">*</font> chrClave <font color="black">=</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>PK<font color="black">-</font><font color="black">&#62;</font>GetKey<font color="black">(</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializadoNuevo,aux<font color="black">)</font>;
     string <font color="black">*</font>strClave <font color="black">=</font> <font color="blue">new</font> string<font color="black">(</font>chrClave<font color="black">)</font>;
     free<font color="black">(</font>chrClave<font color="black">)</font>;
     vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font> vec <font color="black">=</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">-</font><font color="black">&#62;</font>Buscar<font color="black">(</font><font color="black">*</font>strClave<font color="black">)</font>;
     vector<font color="black">&#60;</font><font color="blue">unsigned</font> <font color="blue">int</font><font color="black">&#62;</font><font color="black">:</font><font color="black">:</font> iterator it;
     it<font color="black">=</font>vec.begin<font color="black">(</font><font color="black">)</font>;
     Dato <font color="black">*</font>datoAux<font color="black">=</font>NULL;
     dato<font color="black">-</font><font color="black">&#62;</font>clone<font color="black">(</font>datoAux<font color="black">)</font>;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>estrategiaAlm<font color="black">-</font><font color="black">&#62;</font>leer<font color="black">(</font>datoAux,<font color="black">*</font>it<font color="black">)</font>;
     datoAux<font color="black">-</font><font color="black">&#62;</font>serialize<font color="black">(</font><font color="black">&</font>datoSerializadoViejo,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion<font color="black">)</font>;
     <font color="blue">delete</font><font color="black">(</font>datoAux<font color="black">)</font>;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">-</font><font color="black">&#62;</font>Modificar<font color="black">(</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializadoViejo,<font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializadoNuevo,<font color="maroon">0</font><font color="black">)</font>;
     free<font color="black">(</font>datoSerializadoViejo<font color="black">)</font>;
     free<font color="black">(</font>datoSerializadoNuevo<font color="black">)</font>;
     vector<font color="black">&#60;</font>HashChange<font color="black">&#62;</font><font color="black">*</font> vecAux <font color="black">=</font> <font color="black">(</font><font color="black">(</font>IndiceHashExtensible<font color="black">*</font><font color="black">)</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>getModificaciones<font color="black">(</font><font color="black">)</font>;   
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ejecutarCambios<font color="black">(</font>vecAux<font color="black">)</font>;
     vecAux<font color="black">-</font><font color="black">&#62;</font>clear<font color="black">(</font><font color="black">)</font>;
     <font color="blue">delete</font><font color="black">(</font>strClave<font color="black">)</font>;
<font color="black">}</font>
     

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>eliminar<font color="black">(</font>Dato <font color="black">*</font>datoNvo<font color="black">)</font><font color="black">{</font>
     <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>ARBOL<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>eliminarArbol<font color="black">(</font>datoNvo<font color="black">)</font>;
     <font color="blue">else</font> <font color="blue">if</font><font color="black">(</font><font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoIndice<font color="black">=</font><font color="black">=</font>HASH<font color="black">)</font>
         <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>eliminarHashing<font color="black">(</font>datoNvo<font color="black">)</font>;              
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>eliminarArbol<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>         
<font color="black">}</font>

<font color="blue">void</font> EtgRecUnAlmacenamiento<font color="black">:</font><font color="black">:</font>eliminarHashing<font color="black">(</font>Dato <font color="black">*</font>dato<font color="black">)</font><font color="black">{</font>
     <font color="blue">void</font><font color="black">*</font> datoSerializado<font color="black">=</font>NULL;
     dato<font color="black">-</font><font color="black">&#62;</font>serialize<font color="black">(</font><font color="black">&</font>datoSerializado,<font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>tipoSerializacion<font color="black">)</font>;
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">-</font><font color="black">&#62;</font>Eliminar<font color="black">(</font><font color="black">(</font><font color="blue">char</font><font color="black">*</font><font color="black">)</font>datoSerializado<font color="black">)</font>;
     vector<font color="black">&#60;</font>HashChange<font color="black">&#62;</font><font color="black">*</font> vecAux <font color="black">=</font> <font color="black">(</font><font color="black">(</font>IndiceHashExtensible<font color="black">*</font><font color="black">)</font> <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>indice<font color="black">)</font><font color="black">-</font><font color="black">&#62;</font>getModificaciones<font color="black">(</font><font color="black">)</font>;   
     <font color="blue">this</font><font color="black">-</font><font color="black">&#62;</font>ejecutarCambios<font color="black">(</font>vecAux<font color="black">)</font>;
     vecAux<font color="black">-</font><font color="black">&#62;</font>clear<font color="black">(</font><font color="black">)</font>;
     free<font color="black">(</font>datoSerializado<font color="black">)</font>;    
<font color="black">}</font>

</PRE>
</BODY>
</HTML>
